﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace Rebel1._1
{
    class Bola
    {
        GraphicsDeviceManager graphics;
        SpriteBatch sprite;
        //ContentManager Content;
        
        public Texture2D texturaBola;
        public Vector2 posicao;
        public float rotacao;
        public Vector2 forca;
        public Vector2 direcao;
      
        public bool alive;
        public bool colidiu;
        public float gravidade = 0.5f;

        
        public Bola(Texture2D textura, Vector2 posicao, float rotacao)
        {
            /*public Bola(Texture2D textura, Vector2 posicao, float rotacao)
        {
            this.rotacao = rotacao;
            this.textura = textura;
            this.posicao = posicao;
            this.forca = new Vector2(8.0f, 8.0f);   // Por enquanto é constante
            this.direcao = new Vector2((float)Math.Cos(rotacao), (float)Math.Sin(rotacao));
        }
*/

           
            this.rotacao = rotacao;
            this.texturaBola = textura;
            this.posicao = posicao;
            this.forca = new Vector2(8.0f, 8.0f);   // Por enquanto é constante
            this.direcao = new Vector2((float)Math.Cos(rotacao), (float)Math.Sin(rotacao));
            alive = false;
            colidiu = false;

        }
        /*public void LoadContent()
        {


            this.texturaBola = Content.Load<Texture2D>("imagens/cannonball");

            this.sprite = new SpriteBatch(graphics.GraphicsDevice);
        }*/

        public void Update(GameTime gameTime)
        {
            // Calculo da próxima posição
            Vector2 novaPosicao = posicao + direcao * forca;

            // Aplicando a gravidade em Y
            direcao.Y += gravidade;

            // Calculando a nova rotação e a próxima direcao
            rotacao = (float)Math.Atan2(novaPosicao.Y - posicao.Y, novaPosicao.X - posicao.X);

            // Atribuindo a nova posição a posição da bola
            posicao = novaPosicao;
        }

        public void Draw(GameTime gameTime, SpriteBatch sBatch)
        {
            sBatch.Draw(texturaBola, posicao,Color.White);
            
        }
        public BoundingSphere Area()
        {
            return new BoundingSphere(new Vector3(posicao.X + texturaBola.Width / 2, posicao.Y + texturaBola.Height / 2, 0.0f),
                texturaBola.Width / 2);
        }
    }
}
